home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / scope / 026-050 / scopedisk44 / magicsqr / magicsquare (.txt) < prev    next >
AmigaBASIC Source Code  |  1995-03-18  |  6KB  |  232 lines

  1. RANDOMIZE TIMER
  2. DIM vectors(10,10):DIM solutionmatrix(10,10):MOUSE ON
  3. REM Read Transformation Vectors
  4. FOR col=0 TO 9
  5. FOR row=0 TO 9
  6.    READ vectors(row,col)
  7. NEXT row
  8. NEXT col
  9. REM Read Winning Vector
  10. FOR row=0 TO 9
  11.    READ winningvector(row)
  12. NEXT row
  13. REM Read Solution Matrix
  14. FOR col=0 TO 9
  15. FOR row=0 TO 9
  16.    READ solutionmatrix(row,col)
  17. NEXT row
  18. NEXT col
  19. REM Read block coordinates for paint function
  20. FOR row=0 TO 9
  21.    READ bx(row),by(row)
  22. NEXT row
  23. REM Read voice data
  24. FOR v=0 TO 8
  25.    READ how%(v)
  26. NEXT v   
  27. start:
  28. CLS
  29. REM Iniatialization
  30. FOR i=0 TO 9:gamevector(i)=0:NEXT i
  31. attempts=0 
  32. REM Generate random starting pattern and display it.
  33. FOR i=1 TO 9
  34.    initialpattern = INT(RND*512)
  35.    IF initialpattern/2-INT(initialpattern/2)=0 THEN 
  36.       gamevector(i)=1 
  37.       ON i GOSUB b1,b2,b3,b4,b5,b6,b7,b8,b9               
  38.    END IF
  39.    IF gamevector(i)<>1 THEN
  40.       gamevector(i)=0
  41.       ON i GOSUB eb1,eb2,eb3,eb4,eb5,eb6,eb7,eb8,eb9
  42.    END IF      
  43. NEXT i
  44. REM Partition Window
  45. LINE (15,160)-(615,160):LINE (615,160)-(615,165)
  46. LINE (615,165)-(15,165):LINE (15,165)-(15,160)
  47. PAINT (20,163),2,1
  48. LOCATE 22,5
  49. PRINT "     Click on the square with which you wish to change the pattern"
  50. REM Query the mouse
  51. query:
  52.    M0=MOUSE(0)
  53.    IF M0=1 THEN GOSUB WhereIsIt 
  54.    GOTO query      
  55. WhereIsIt:
  56.   M1=MOUSE(1):M2=MOUSE(2)
  57.   IF M1>119 AND M1<201 AND M2>14 AND M2<46 THEN block = 1 
  58.   IF M1>279 AND M1<361 AND M2>14 AND M2<46 THEN block = 2 
  59.   IF M1>439 AND M1<521 AND M2>14 AND M2<46 THEN block = 3 
  60.   IF M1>119 AND M1<201 AND M2>64 AND M2<96 THEN block = 4 
  61.   IF M1>279 AND M1<361 AND M2>64 AND M2<96 THEN block = 5 
  62.   IF M1>439 AND M1<521 AND M2>64 AND M2<96 THEN block = 6 
  63.   IF M1>119 AND M1<201 AND M2>114 AND M2<146 THEN block = 7 
  64.   IF M1>279 AND M1<361 AND M2>114 AND M2<146 THEN block = 8 
  65.   IF M1>439 AND M1<521 AND M2>114 AND M2<146 THEN block = 9
  66.   IF M1>14 AND M1<79 AND M2>143 AND M2<153 THEN block = 10
  67. REM Check if mouse was clicked in a game block  
  68. IF block=0 THEN
  69.    BEEP:WINDOW 2,"ERROR",(190,95)-(445,115),2,-1
  70.    COLOR 3,0
  71.    PRINT" Click inside a block please..."
  72.    FOR i=1 TO 3500:NEXT i
  73.    WINDOW CLOSE 2
  74.    RETURN
  75. END IF
  76. REM Check if mouse was clicked in the solve it block
  77. IF block=10 THEN 
  78.    FOR row=1 TO 9
  79.       tempvector(row)=gamevector(row) XOR winningvector(row)
  80.    NEXT row
  81.    FOR row=1 TO 9
  82.    FOR col=1 TO 9
  83.       vector(col)=solutionmatrix(row,col)*tempvector(col)
  84.    NEXT col
  85.    FOR i=1 TO 8
  86.       vector(i+1)=vector(i) XOR vector(i+1)
  87.    NEXT i
  88.    solutionvector(row)=vector(i)
  89.    NEXT row
  90.    WINDOW 2,"Solution",(220,95)-(420,103),2,-1
  91.    COLOR 3,0
  92.    FOR row=1 TO 9
  93.       IF solutionvector(row)=1 THEN PRINT row;
  94.    NEXT row
  95.    FOR i=1 TO 5000:NEXT i:WINDOW CLOSE 2 
  96.    block=0:RETURN        
  97. END IF
  98. REM Transform Pattern
  99. FOR row=1 TO 9
  100.   gamevector(row)=gamevector(row) XOR vectors(row,block)  
  101. NEXT row
  102. REM Print the number of attempts so far
  103. CLS:LOCATE 1,34:COLOR 3,1
  104. attempts=attempts+1:PRINT" Attempts:"attempts
  105. COLOR 1,0
  106. FOR i=1 TO 9
  107.     IF gamevector(i)=1 THEN ON i GOSUB b1,b2,b3,b4,b5,b6,b7,b8,b9   
  108.     IF gamevector(i)=0 THEN ON i GOSUB eb1,eb2,eb3,eb4,eb5,eb6,eb7,eb8,eb9
  109. NEXT i
  110. REM Partition Window
  111. LINE (15,160)-(615,160):LINE (615,160)-(615,165)
  112. LINE (615,165)-(15,165):LINE (15,165)-(15,160)
  113. PAINT (20,163),2,1
  114. LOCATE 22,5
  115. PRINT "     Click on the square with which you wish to change the pattern"
  116. REM Set block to 0 to indicate no block selected
  117. block=0
  118. REM Display solution help block
  119. COLOR 3,1:LOCATE 19,3:PRINT" Solve? ":COLOR 1,0
  120. REM Check for success
  121. FOR row=1 TO 9
  122.    IF gamevector(row)=winningvector(row) THEN win=1 :ELSE RETURN
  123. NEXT row
  124. COLOR 3,0
  125. FOR i=1 TO 9
  126.    ON i GOSUB eb1,eb2,eb3,eb4,eb5,eb6,eb7,eb8,eb9
  127.    IF i<>5 THEN PAINT (bx(i),by(i)),2,3
  128. NEXT i
  129. SAY TRANSLATE$ ("Congratulations you have solved Magic Square"),how%
  130. SAY TRANSLATE$ ("If you would like to try again press the Y key"),how%
  131. COLOR 1,0
  132. PlayAgain:
  133.    a$=INKEY$ 
  134.    IF a$="y" THEN start :ELSE IF a$="n" THEN END 
  135.    GOTO PlayAgain
  136. REM Fill in blocks
  137. b1:
  138.    AREA (120,15):AREA (200,15):AREA (200,45):AREA (120,45):AREAFILL
  139.    RETURN
  140. b2:
  141.    AREA (280,15):AREA (360,15):AREA (360,45):AREA (280,45):AREAFILL
  142.    RETURN
  143. b3:
  144.    AREA (440,15):AREA (520,15):AREA (520,45):AREA (440,45):AREAFILL
  145.    RETURN
  146. b4:
  147.    AREA (120,65):AREA (200,65):AREA (200,95):AREA (120,95):AREAFILL
  148.    RETURN
  149. b5:
  150.    AREA (280,65):AREA (360,65):AREA (360,95):AREA (280,95):AREAFILL
  151.    RETURN
  152. b6:
  153.    AREA (440,65):AREA (520,65):AREA (520,95):AREA (440,95):AREAFILL
  154.    RETURN
  155. b7:
  156.    AREA (120,115):AREA (200,115):AREA (200,145):AREA (120,145):AREAFILL
  157.    RETURN
  158. b8:
  159.    AREA (280,115):AREA (360,115):AREA (360,145):AREA (280,145):AREAFILL
  160.    RETURN
  161. b9:
  162.    AREA (440,115):AREA (520,115):AREA (520,145):AREA (440,145):AREAFILL
  163.    RETURN
  164. REM Draw border around empty blocks
  165. eb1:
  166.    LINE (120,15)-(200,15):LINE (200,15)-(200,45)
  167.    LINE (200,45)-(120,45):LINE (120,45)-(120,15)
  168.    RETURN
  169. eb2:
  170.    LINE (280,15)-(360,15):LINE (360,15)-(360,45)
  171.    LINE (360,45)-(280,45):LINE (280,45)-(280,15)
  172.    RETURN
  173. eb3:
  174.    LINE (440,15)-(520,15):LINE (520,15)-(520,45)
  175.    LINE (520,45)-(440,45):LINE (440,45)-(440,15)
  176.    RETURN
  177. eb4:
  178.    LINE (120,65)-(200,65):LINE (200,65)-(200,95)
  179.    LINE (200,95)-(120,95):LINE (120,95)-(120,65)
  180.    RETURN
  181. eb5:
  182.    LINE (280,65)-(360,65):LINE (360,65)-(360,95)
  183.    LINE (360,95)-(280,95):LINE (280,95)-(280,65)
  184.    RETURN
  185. eb6:
  186.    LINE (440,65)-(520,65):LINE (520,65)-(520,95)
  187.    LINE (520,95)-(440,95):LINE (440,95)-(440,65)
  188.    RETURN
  189. eb7:
  190.    LINE (120,115)-(200,115):LINE (200,115)-(200,145)
  191.    LINE (200,145)-(120,145):LINE (120,145)-(120,115)
  192.    RETURN
  193. eb8:
  194.    LINE (280,115)-(360,115):LINE (360,115)-(360,145)
  195.    LINE (360,145)-(280,145):LINE (280,145)-(280,115)
  196.    RETURN
  197. eb9:
  198.    LINE (440,115)-(520,115):LINE (520,115)-(520,145)
  199.    LINE (520,145)-(440,145):LINE (440,145)-(440,115)
  200.    RETURN   
  201. REM Transformation Vectors
  202. DATA 0,0,0,0,0,0,0,0,0,0
  203. DATA 0,1,1,0,1,1,0,0,0,0
  204. DATA 0,1,1,1,0,0,0,0,0,0
  205. DATA 0,0,1,1,0,1,1,0,0,0
  206. DATA 0,1,0,0,1,0,0,1,0,0
  207. DATA 0,0,1,0,1,1,1,0,1,0
  208. DATA 0,0,0,1,0,0,1,0,0,1
  209. DATA 0,0,0,0,1,1,0,1,1,0
  210. DATA 0,0,0,0,0,0,0,1,1,1
  211. DATA 0,0,0,0,0,1,1,0,1,1
  212. REM Winning Vector
  213. DATA 0,1,1,1,1,0,1,1,1,1
  214. REM Solution Matrix
  215. DATA 0,0,0,0,0,0,0,0,0,0
  216. DATA 0,1,1,1,1,1,0,1,0,0
  217. DATA 0,0,1,0,1,0,1,1,0,1
  218. DATA 0,1,1,1,0,1,1,0,0,1
  219. DATA 0,0,1,1,1,0,0,0,1,1
  220. DATA 0,0,1,0,1,1,1,0,1,0
  221. DATA 0,1,1,0,0,0,1,1,1,0
  222. DATA 0,1,0,0,1,1,0,1,1,1
  223. DATA 0,1,0,1,1,0,1,0,1,0
  224. DATA 0,0,0,1,0,1,1,1,1,1
  225. REM Coordinate Data
  226. DATA 0,0
  227. DATA 160,30,320,30,460,30
  228. DATA 160,80,320,80,460,80
  229. DATA 160,130,320,130,460,130
  230. REM Voice Data
  231. DATA 240,0,170,1,21000,64,10,0,0
  232.